package com.alibaba.citrus.cr.price.repository;

import com.alibaba.lattice2.epoch.sdk.model.Result;
import com.epoch.app.crforecastsales.activityuserecordrelation.dto.QueryActivityUseRecordRelationResponse;
import com.epoch.app.crforecastsales.domian.activityterm.model.ActivityTerm;
import com.epoch.app.crforecastsales.domian.activitytermgiftrelation.model.ActivityTermGiftRelation;
import com.epoch.app.crforecastsales.domian.activitytitle.model.ActivityTitle;
import com.epoch.app.crforecastsales.domian.segmentedactivityterm.dto.LoadListResponse;
import com.epoch.app.crforecastsales.ofsactivitytermindex.dto.*;
import com.epoch.app.crpricecenter.dto.request.ActivityInfoRequest;
import com.epoch.app.crpricecenter.dto.request.CoverActivityInfoRequest;
import com.epoch.app.crpricecenter.dto.request.ParticipateActivityInfoRequest;
import com.epoch.app.crpricecenter.dto.response.ActivityTermViewResponse;
import com.epoch.app.crpricecenter.model.dto.ActivityGiftItemRelationSDO;
import com.epoch.app.crpricecenter.model.dto.ActivityTermIndexSDO;
import com.epoch.app.crpricecenter.model.dto.SegmentedActivityCombinationSDO;
import com.epoch.app.crpricecenter.sdo.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * @author: qiaojiange
 * @create: 2021/10/17
 * @Description 请描述类的业务用途
 */
public interface ActivityQueryRepository {
    /**
     * 查询活动抬头
     *  1. 根据客户 ID 查询活动
     *  2. 根据送货地址 ID 查询活动
     * @param request
     * @return
     */
    Set<ActivityTitleSDO> queryActivityTitle(ActivityInfoRequest request);

    /**
     * 查询活动项目列表
     *
     * @param obtainActivityId
     * @return
     */
    Set<ActivityTermSDO> queryTermSDOList(String obtainActivityId,String saleUnit);

    /**
     * 查询活动抬头扩展
     *
     * @param obtainActivityNoteId
     * @return
     */
    ActivityTitleExtSDO queryTitleExt(String obtainActivityNoteId);

    /**
     * 分页查询活动列表
     * @param sdo
     * @return
     */
    QueryPageActivityTermIndexResponse queryPromotionPageList(ActivityTermIndexSDO sdo);

    /**
     * 查询销售组织信息，为筛选框提供的接口
     * @return
     */
    QuerySalesOrganizationIdsResponse querySalesOrganizationIds(ActivityTermIndexSDO activityTermIndexSDO);

    /**
     * 查询销售渠道信息，为筛选框提供的接口
     * @return
     */
    QueryChannelIdsResponse queryChannelIds(ActivityTermIndexSDO activityTermIndexSDO);

    /**
     * 分页查询活动明细列表
     * @param sdo
     * @return
     */
    Result<List<ActivityTermViewResponse>> queryPromotionDetailPageList(ActivityTermSDO sdo);

    /**
     * 分页查询坎级活动
     * @param
     * @return
     */
    LoadListResponse querySegmentDetailPageList(SegmentedActivityTermSDO sdo);

    /**
     * 分页查询活动使用详情
     * @param activityUseRecordRelationSDO
     * @return
     */
    QueryActivityUseRecordRelationResponse queryPromotionUsedDetailPageList(ActivityUseRecordRelationSDO activityUseRecordRelationSDO);

    /**
     * 根据活动 id 查询活动抬头
     *
     * @param activityId
     * @return
     */
    ActivityTitleSDO queryActivityTitleByActivityId(String activityId);

    /**
     * 通过termId,查询活动项目列表
     *
     * @param activityId
     * @param termId
     * @return
     */
    ActivityTermSDO queryTermSDOListByTermId(String activityId, String termId);

    /**
     * 查询坎级活动列表
     * @param activityId 活动 id
     * @param activityTermId 活动项目 id
     * @return
     */
    List<SegmentedActivityTermSDO> querySegmentedActivityTermList(String activityId, String activityTermId);

    /**
     * 根据活动 id查询原品 id列表
     *
     * @param activityId 活动 ID
     * @param obtainActivityTermId 活动项目 ID
     * @return
     */
    List<String> queryTermAndItemRelationByTermId(String activityId, String obtainActivityTermId);

    /**
     * 在活动 term 和赠品关系表中查询赠品列表
     * @param obtainActivityId 活动 ID
     * @param obtainActivityTermId 活动项目 ID
     * @return
     */
    List<String> queryTermAndGiftRelationList(String obtainActivityId, String obtainActivityTermId);


    /**
     * 查询客户外部编码list
     * @return
     */
    QueryClientIdsResponse queryCustomerIds(ActivityTermIndexSDO activityTermIndexSDO);

    /**
     * 查询货品外部编码
     * @param activityTermIndexSDO
     * @return
     */
    QueryItemIdsResponse queryItemIds(ActivityTermIndexSDO activityTermIndexSDO);

    /**
     * 查询活动使用记录
     * @param activityInfo
     * @return
     */
    Boolean checkUsedActivityRecord(CoverActivityInfoRequest activityInfo);

    /**
     * 查询活动id和活动项目id
     * @param activityGiftItemRelationSDO
     */
    List<ActivityTermGiftRelation> queryActivityIdAndTermIdList(ActivityGiftItemRelationSDO activityGiftItemRelationSDO);

    /**
     * 查询活动使用记录
     * @param request
     * @return
     */
    ActivityUseRecordRelationSDO queryActivityUseRecord(ParticipateActivityInfoRequest request);

    /**
     * 查询坎级组合列表
     * @param activityId
     * @param activityTermId
     * @param segmentedActivityId
     * @return
     */
    List<SegmentedActivityCombinationSDO> querySegmentedActivityCombinationList(String activityId, String activityTermId, String segmentedActivityId);

    /**
     * 查询坎级组合列表
     * @param activityId 活动 ID
     * @param activityTermId 活动项目 ID
     * @return 坎级组合列表
     */
    List<SegmentedActivityCombinationSDO> querySegmentedActivityCombinationList(String activityId, String activityTermId);

    /**
     * 获取客户编码
     * @param activityTitleSDO
     * @return
     */
    Result<List<String>> queryCustomerCodesByActivityId(ActivityTitleSDO activityTitleSDO);

    /**
     * 获取原品编码
     * @param activityTermSDO
     * @return
     */
    Result<List<String>> queryItemCodesByActivityId(ActivityTermSDO activityTermSDO);

    /**
     * 获取赠品编码
     * @param activityTermSDO
     * @return
     */
     Result<List<String>> queryGiftCodesByActivityId(ActivityTermSDO activityTermSDO);

    /**
     * 获取活动和客户的对应关系
     * @param activityIds
     */
    List<ActivityTitle> queryActivityAndCustomerMap(List<String> activityIds);

    /**
     * 获取活动和原品的对应关系
     * @param activityMap
     */
    List<ActivityTerm> queryActivityAndItermMap(Map<String, String> activityMap);

    /**
     * 获取活动和赠品的对应关系
     * @param activityMap
     */
    List<ActivityTerm> queryActivityAndGiftMap(Map<String, String> activityMap);

    /**
     * 获取活动和客户的对应关系用于导出功能
     * @param activityIds
     */
    List<ActivityTitle> queryActivityAndCustomerMapForExport(List<String> activityIds);

    /**
     * 获取活动和原品的对应关系用于导出功能
     * @param activityMap
     */
    List<ActivityTerm> queryActivityAndItermMapForExport(Map<String, String> activityMap);

    /**
     * 获取活动和赠品的对应关系用于导出功能
     * @param activityMap
     */
    List<ActivityTerm> queryActivityAndGiftMapForExport(Map<String, String> activityMap);

    /**
     * 获取按组管控活动号
     * @param activityIds
     * @return
     */
    List<String> queryGroupControlActivityIds(List<String> activityIds);

    /**
     * 查询受分组管控的活动和活动便签号
     * @param activityIds
     * @return
     */
    List<ActivityTitle> queryGroupControlActivityIdAndNoteId(Set<String> activityIds);


    /**
     * 根据活动项目id批量查询活动明细信息
     * @param activityTermIds
     * @return
     */
    List<ActivityTerm> queryActivityIdsByActivityTermIds(List<String> activityTermIds);
}
